﻿// Inner Fire 游戏引擎库
// AnimatorPrinter - 动画状态机显示器
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：应用层(4)
// 用于打印信息，骨骼状态的粒子等等。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-05-30

#pragma once

#include <game/animation/armature_node.h>
#include <static_string.h>

namespace ifire::game {

class Animator;
class InstancedSpriteObject;

class AnimatorPrinter {
public:
  AnimatorPrinter(Animator* animator);
  AnimatorPrinter(const AnimatorPrinter& lhs) = delete;
  AnimatorPrinter& operator=(const AnimatorPrinter& lhs) = delete;
  ~AnimatorPrinter() = default;

  // 设置一个Debug的实例精灵。设置骨骼的信息
  void SetSpriteInformation(ikit::sstr type, InstancedSpriteObject* obj);

private:
  // 用于打印骨骼相关信息（通常是已经生成好的骨骼）
  void PrintBone(InstancedSpriteObject* obj, int data_type);
  // 用于打印骨架相关信息（通常是由原始骨架进行计算）
  void PrintArmature(const ArmatureTree* tree, InstancedSpriteObject* obj,
      bool is_t_pose, int data_type);

  Animator* animator_;
};

} // namespace ifire::game